package com.gitee.faster.redis.command;

import cn.hutool.core.collection.CollUtil;
import com.gitee.faster.redis.protocol.RedisRequest;
import com.gitee.faster.redis.protocol.RedisResponse;
import redis.clients.jedis.Protocol;

import java.util.List;

/**
 * @author hongda.li
 */
public interface RedisCommand {

    /**
     * 命令类型
     *
     * @return 命令类型枚举
     */
    Protocol.Command command();

    /**
     * 允许的命令关键字集合
     *
     * @return 关键字集合
     */
    List<Protocol.Keyword> keywords();

    /**
     * 执行命令
     *
     * @param request   请求
     * @param arguments 参数
     * @return 响应
     */
    RedisResponse execute(RedisRequest request, List<String> arguments);

    default Protocol.Keyword parseKeyword(List<String> arguments, int index) {
        String str = CollUtil.get(arguments, index);
        if (str == null) {
            return null;
        } else {
            return keywords()
                    .stream()
                    .filter(keyword -> keyword.name().equalsIgnoreCase(str))
                    .findFirst()
                    .orElse(null);
        }
    }
}
